Most modern computers have both a keyboard and a mouse (or other pointer device, such as a trackball, puck, tablet, or spaceball) as input devices. A user of the computer uses the mouse to drag a pointer or cursor on the computer's display. A mouse has one or more buttons; these buttons typically send a signal to the computer when clicked, and this signal is presented to a program running on the computer. Some computers present a "click" to the program when a button is pressed (downclicked) and when released (upclicked), and some only present a signal on one of a down- or upclick. The click signal, sometimes called a button event, passed to the program typically incorporates the current position of the pointer.
Most software that accepts mouse input allows the programmer or user to use a mouse button to issue a command to the software. Besides the obvious advantages of a mouse in positioning the pointer, mouse-based interfaces substantially speed up data manipulation compared to keyboard-based interfaces. The advantages of making commands available through mouse buttons include:
The user's hand can stay on the mouse. Moving a hand from arrow keys to alpha keyboard or mouse to keyboard takes time.
Similarly, the user's eyes and attention can stay focused on his work, instead of having to search the keyboard for the proper menu item and key, then return to search the screen for his point of interest.
The mouse only has a few buttons. It is easy to remember which button executes which command, and the correct button can be found by touch.
One of the major virtues of a mouse, the limited number of buttons, can also be a major limitation: typically only a few commands are bound to mouse buttons. In a complex software system, such as a very large scale integrated circuit (VLSI) design system, there are typically a few commands --but often more than three --that are used extensively and that the user should have easy access to.
The most straightforward technique for binding commands to buttons is "one button--one command:" in any particular program context, any button performs one and only one function.
One way to extend the number of commands available through the buttons is pop-up and slide-off menus. When the user clicks a button, a menu pops up on the screen. The user drags the mouse to position the pointer on the desired command. Some menu items have slide-off submenus --by dragging the mouse off the right side of a menu bar, another submenu pops up. Finally, at the next button event (either an upclick or a second full down/up click), the selected command is issued.
When a small number of commands are to be executed repeatedly, it's desirable to bind them directly to mouse buttons, so that clicking the button immediately executes the command, eliminating the time to search for and position the pointer on a menu item. In one known approach, the screen is divided into a work area and a command menu. The user drags the pointer onto the command menu and clicks a button. Rather than issuing the command, this click binds the selected command to that button. The command will be issued whenever that button is clicked in the work area, until the button is clicked on another command of the menu.
A prior technique for simultaneously binding a plurality of commands to each mouse button is the "stroke recognition" method. One implementation of stroke recognition uses a matrix whose cells are numbered 1 to 9:
______________________________________ 7 8 9 4 5 6 1 2 3 ______________________________________
The user binds a command to a number sequence. One button of the mouse is dedicated to strokes; the other buttons of the mouse may remain bound to single commands or to pop-up menus, for instance. When the user downclicks the stroke button, the stroke recognizer begins to track the motions of the mouse. When the button upclicks, those motions are mapped to the cells of the matrix and classified into a stroke. For example, in a hypothetical example, the sequence "7895123" (forming the letter "Z") zooms on the region where the user traced the "Z". The user can then zoom to a drawing area by downclicking the stroke mouse button, drawing a "Z" pattern over the area of interest, and then upclicking. The stroke "7895123" is distinguished from "3215987."